package com.example.java8.streamdemo.streamdemo.DistinctClassDemo;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.util.CollectionUtils;
import static java.util.stream.Collectors.collectingAndThen;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;

import static java.util.stream.Collectors.toCollection;

/**
 * @Author by KoVaVo
 * @Date 2021-08-26 21:41
 * @Desc: 实体去重=》根据实体中的某一个字段去重：使用distinct
 */
public class DistinctByParam {
    public static void main(String[] args) throws JsonProcessingException {

        // 这里第一种方法我们通过新创建一个只有不同元素列表来实现根据对象某个属性去重
        ObjectMapper objectMapper = new ObjectMapper();
        List<student> students = stuList.getStuList();
        System.out.println("去重前。。。");
        String s = objectMapper.writeValueAsString(students);
        System.out.println(s);
        System.out.println("去重后。。。");
        // 这里我们引入了两个静态方法，以及通过 TreeSet<> 来达到获取不同元素的效果
        // 1. import static java.util.stream.Collectors.collectingAndThen;
        // 2. import static java.util.stream.Collectors.toCollection;
        ArrayList<student> collect = students.stream().collect(
                collectingAndThen(
                        toCollection(() -> new TreeSet<>(Comparator.comparing(student::getName))), ArrayList::new
                )
        );
        System.out.println("根据名字去重后");
        System.out.println(objectMapper.writeValueAsString(collect));
    }


}
